package FileAndRecurison.递归;
/**
        **递归**：指在当前方法内调用自己的这种现象。
        * **递归的分类:**
        - 递归分为两种，直接递归和间接递归。
        - 直接递归称为方法自身调用自己。
        - 间接递归可以A方法调用B方法，B方法调用C方法，C方法调用A方法。

        * **注意事项**：
        - 递归一定要有条件限定，保证递归能够停止下来，否则会发生栈内存溢出。
        - 在递归中虽然有限定条件，但是递归次数不能太多。否则也会发生栈内存溢出。
        - 构造方法,禁止递归

    使用前提：
        当调用方法的时候，方法的主体不变，每次调用的参数不同，可以使用递归
 */
public class RecurisonTest01 {
    public static void main(String[] args) {
        //a();
        b(1);
    }

    public RecurisonTest01() {
        //构造方法,禁止递归
        // RecurisonTest01();
    }

    private static void b(int i) {
        //java.lang.StackOverflowError
        System.out.println(i);
        if (i<30000){
            i++;
            b(i);
        }
    }

    private static void a() {
        System.out.println("a");
        //没有递归出口，java.lang.StackOverflowError内存溢出
        //a方法在无限调用a方法，会一直在栈内存中调用，超出栈内存空间，导致溢出
        a();
    }
}
